package parser;

import org.apache.commons.digester.Digester;
import org.apache.commons.digester.xmlrules.DigesterLoader;
import org.xml.sax.SAXException;

import java.io.IOException;

/**
 * @author 石小俊
 * @date 2023年07月12日 17:02
 */
public class DigesterParser {

    public static void main(String[] args) {
        // 获取解析器
        // 解析rule.xml,将Java对象与需要解析的文件中的标签关联在一起
        Digester digester = DigesterLoader.createDigester(DigesterParser.class.getClassLoader().getResource("parser/rule.xml"));

        // 准备一个空的根标签所对应的Java对象
        ClassBean classBean = new ClassBean();

        // 将该对象交给解析器
        digester.push(classBean);

        try {
            System.out.println("解析前:"+classBean);
            // 解析
            digester.parse(DigesterParser.class.getClassLoader().getResourceAsStream("students.xml"));
            // 解析完成之后会将解析的所有数据传输到交给解析器的对象中
            System.out.println("解析后:"+classBean);

            // 查询学号为2的学生姓名
            System.out.println(classBean.findStudent("2").getName());
        } catch (IOException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        }
    }

}
